Python Pandas pivot jadvallari bilan ma'lumotlarni qayta shakllantirishni o'zlashtiring. Global ma'lumotlar tahlili uchun sintaksis, ilg'or usullar va amaliy misollarga chuqur kirish.
Python Pandas Pivot Tables: Ma'lumotlarni qayta shakllantirish bo'yicha to'liq qo'llanma
Ma'lumotlarni tahlil qilish dunyosida ma'lumotlarni umumlashtirish, birlashtirish va qayta tuzish qobiliyati shunchaki mahorat emas, balki bu super kuchdir. Xom ma'lumotlar, o'zining tabiiy shaklida, ko'pincha keng tarqalgan, batafsil daftar kitobiga o'xshaydi. U ma'lumotlarga boy, lekin talqin qilish qiyin. Mazmunli tushunchalarni olish uchun biz ushbu daftar kitobini qisqacha xulosaga aylantirishimiz kerak. Aynan shu erda pivot jadvallari ustunlik qiladi va Python dasturchilari uchun Pandas kutubxonasi kuchli va moslashuvchan vositani taqdim etadi: pivot_table().
Ushbu qo'llanma ma'lumotlar tahlilchilari, olimlar va Python ixlosmandlarining global auditoriyasi uchun mo'ljallangan. Biz Pandas pivot jadvallarining mexanikasiga chuqur kiramiz, fundamental tushunchalardan tortib ilg'or usullargacha. Turli qit'alardagi savdo ko'rsatkichlarini umumlashtirasizmi, mintaqalar bo'ylab iqlim ma'lumotlarini tahlil qilasizmi yoki tarqatilgan jamoa uchun loyiha ko'rsatkichlarini kuzatasizmi, pivot jadvallarini o'zlashtirish ma'lumotlarni o'rganishga yondashuvingizni tubdan o'zgartiradi.
Pivot jadvali nima o'zi?
Agar siz Microsoft Excel yoki Google Sheets kabi jadval dasturlaridan foydalangan bo'lsangiz, unda siz pivot jadvali tushunchasi bilan tanish bo'lishingiz mumkin. Bu kattaroq ma'lumotlar to'plamidan kerakli hisobotni olish uchun ma'lumotlarning tanlangan ustunlari va satrlarini qayta tashkil etish va umumlashtirish imkonini beruvchi interaktiv jadval.
Pivot jadvali ikkita asosiy narsani amalga oshiradi:
- Agregatsiya: U bir yoki bir nechta toifalar bo'yicha guruhlangan raqamli ma'lumotlar uchun xulosa statistikasini (yig'indi, o'rtacha yoki son kabi) hisoblaydi.
- Qayta shakllantirish: U ma'lumotlarni 'uzun' formatdan 'keng' formatga o'zgartiradi. Barcha qiymatlarni bitta ustunda bo'lish o'rniga, u ustundagi noyob qiymatlarni chiqishda yangi ustunlarga 'pivot' qiladi.
Pandas pivot_table() funktsiyasi ushbu kuchli funksionallikni to'g'ridan-to'g'ri Python ma'lumotlarini tahlil qilish ish jarayoniga olib kiradi, bu esa qayta tiklanadigan, skriptlanadigan va kengaytiriladigan ma'lumotlarni qayta shakllantirish imkonini beradi.
Muhitni va namunaviy ma'lumotlarni sozlash
Boshlashdan oldin, Pandas kutubxonasi o'rnatilganligiga ishonch hosil qiling. Agar yo'q bo'lsa, siz uni Python-ning paket o'rnatuvchisi pip yordamida o'rnatishingiz mumkin:
pip install pandas
Endi, uni Python skriptimizga yoki daftarimizga import qilaylik:
import pandas as pd
import numpy as np
Global savdo ma'lumotlar to'plamini yaratish
Misollarimizni amaliy va global ahamiyatga ega qilish uchun biz transmilliy elektron tijorat kompaniyasining savdo ma'lumotlarini aks ettiruvchi sintetik ma'lumotlar to'plamini yaratamiz. Ushbu ma'lumotlar to'plami turli mintaqalar, mamlakatlar va mahsulot toifalari bo'yicha savdo ma'lumotlarini o'z ichiga oladi.
# Ma'lumotlar lug'atini yaratish
data = {
'TransactionID': range(1, 21),
'Date': pd.to_datetime([
'2023-01-15', '2023-01-16', '2023-01-17', '2023-02-10', '2023-02-11',
'2023-02-12', '2023-03-05', '2023-03-06', '2023-03-07', '2023-01-20',
'2023-01-21', '2023-02-15', '2023-02-16', '2023-03-10', '2023-03-11',
'2023-01-18', '2023-02-20', '2023-03-22', '2023-01-25', '2023-02-28'
]),
'Region': [
'North America', 'Europe', 'Asia', 'North America', 'Europe', 'Asia', 'North America', 'Europe', 'Asia', 'Europe',
'Asia', 'North America', 'Europe', 'Asia', 'North America', 'Asia', 'Europe', 'North America', 'Europe', 'Asia'
],
'Country': [
'USA', 'Germany', 'Japan', 'Canada', 'France', 'India', 'USA', 'UK', 'China', 'Germany',
'Japan', 'USA', 'France', 'India', 'Canada', 'China', 'UK', 'USA', 'Germany', 'India'
],
'Product_Category': [
'Electronics', 'Apparel', 'Electronics', 'Books', 'Apparel', 'Electronics', 'Books', 'Electronics', 'Apparel',
'Apparel', 'Books', 'Electronics', 'Books', 'Apparel', 'Electronics', 'Books', 'Apparel', 'Books', 'Electronics', 'Electronics'
],
'Units_Sold': [10, 5, 8, 20, 7, 12, 15, 9, 25, 6, 30, 11, 18, 22, 14, 28, 4, 16, 13, 10],
'Unit_Price': [1200, 50, 900, 15, 60, 1100, 18, 950, 45, 55, 12, 1300, 20, 40, 1250, 14, 65, 16, 1150, 1050]
}
# Ma'lumotlar bazasini yaratish
df = pd.DataFrame(data)
# Daromadni hisoblash
df['Revenue'] = df['Units_Sold'] * df['Unit_Price']
# Ma'lumotlar bazasining birinchi bir necha qatorlarini ko'rsatish
print(df.head())
Ushbu ma'lumotlar to'plami bizga kategorik ma'lumotlar (Region, Country, Product_Category), raqamli ma'lumotlar (Units_Sold, Revenue) va vaqt seriyali ma'lumotlar (Date) aralashmasi bilan mustahkam asos beradi.
pivot_table() anatomiyasi
Pandas pivot_table() funktsiyasi nihoyatda ko'p qirrali. Keling, uning eng muhim parametrlarini ko'rib chiqaylik:
pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, margins_name='All')
- data: Siz pivot qilmoqchi bo'lgan DataFrame.
- values: Yig'iladigan ma'lumotlarni o'z ichiga olgan ustun(lar). Agar ko'rsatilmagan bo'lsa, qolgan barcha raqamli ustunlar ishlatiladi.
- index: Noyob qiymatlari yangi pivot jadvalining satrlarini tashkil etadigan ustun(lar). Ba'zan bu 'guruhlash kaliti' deb ataladi.
- columns: Yangi jadvalning ustunlarini tashkil qilish uchun 'pivot' qilinadigan ustun(lar)ning noyob qiymatlari.
- aggfunc: 'Qiymatlarga' qo'llaniladigan agregatsiya funktsiyasi. Bu 'sum', 'mean', 'count', 'min', 'max' kabi satr yoki
np.sumkabi funktsiya bo'lishi mumkin. Turli ustunlarga turli funktsiyalarni qo'llash uchun siz funktsiyalar ro'yxatini yoki lug'atini ham o'tkazishingiz mumkin. Standart 'mean'. - fill_value: Pivot jadvalidagi barcha etishmayotgan natijalarni (NaN) almashtirish uchun qiymat.
- margins: Boolean. Agar
Truega o'rnatilgan bo'lsa, u satrlar va ustunlar uchun oraliq jami qo'shadi (shuningdek, katta jami sifatida ham tanilgan). - margins_name:
margins=Truebo'lganda jami bo'lgan satr/ustun nomi. Standart 'All'.
Birinchi pivot jadvalingiz: Oddiy misol
Keling, umumiy biznes savolidan boshlaylik: "Har bir mahsulot toifasi tomonidan yaratilgan umumiy daromad qancha?"
Bunga javob berish uchun biz quyidagilarni qilishimiz kerak:
- Satrlar uchun
Product_Categorydan foydalaning (index). Revenueustunini birlashtiring (values).- Bizning agregatsiya funktsiyamiz sifatida yig'indidan foydalaning (aggfunc).
# Mahsulot toifasi bo'yicha umumiy daromadni ko'rish uchun oddiy pivot jadval
category_revenue = pd.pivot_table(df,
values='Revenue',
index='Product_Category',
aggfunc='sum')
print(category_revenue)
Natija:
Revenue
Product_Category
Apparel 1645
Books 1184
Electronics 56850
Darhol bizda aniq, qisqacha xulosa bor. Xom, 20 qatorli tranzaksiya jurnali savolimizga to'g'ridan-to'g'ri javob beradigan 3 qatorli jadvalga aylantirildi. Bu pivot jadvalining asosiy kuchidir.
Ustun o'lchamini qo'shish
Endi, buni kengaytiramiz. Mahsulot toifasi bo'yicha umumiy daromadni ko'rishni istasak, lekin mintaqa bo'yicha ham bo'linib ko'rsatilsachi? Aynan shu erda columns parametri o'z rolini o'ynaydi.
# Index va ustunli pivot jadval
revenue_by_category_region = pd.pivot_table(df,
values='Revenue',
index='Product_Category',
columns='Region',
aggfunc='sum')
print(revenue_by_category_region)
Natija:
Region Asia Europe North America Product_Category Apparel 1125.0 625.0 NaN Books 336.0 360.0 488.0 Electronics 13200.0 14550.0 29100.0
Bu natija ancha boy. Biz 'Region' ustunidan ('Asia', 'Europe', 'North America') noyob qiymatlarni yangi ustunlarga aylantirdik. Endi biz turli mahsulot toifalari mintaqalar bo'ylab qanday ishlashini osongina taqqoslashimiz mumkin. Biz NaN (Raqam emas) qiymatini ham ko'ramiz. Bu bizning ma'lumotlar to'plamida 'North America' uchun hech qanday 'Apparel' sotuvi qayd etilmaganligini ko'rsatadi. Bu o'z-o'zidan qimmatli ma'lumot!
Ilg'or pivot texnikasi
Asoslar kuchli, lekin pivot_table() ning haqiqiy moslashuvchanligi uning ilg'or funktsiyalarida namoyon bo'ladi.
fill_value bilan etishmayotgan qiymatlarni qayta ishlash
Oldingi jadvalimizdagi NaN aniq, lekin hisobot berish yoki keyingi hisob-kitoblar uchun uni nol sifatida ko'rsatish afzalroq bo'lishi mumkin. fill_value parametri buni osonlashtiradi.
# NaN ni 0 bilan almashtirish uchun fill_value dan foydalanish
revenue_by_category_region_filled = pd.pivot_table(df,
values='Revenue',
index='Product_Category',
columns='Region',
aggfunc='sum',
fill_value=0)
print(revenue_by_category_region_filled)
Natija:
Region Asia Europe North America Product_Category Apparel 1125 625 0 Books 336 360 488 Electronics 13200 14550 29100
Jadval endi toza va o'qish osonroq, ayniqsa texnik bo'lmagan auditoriya uchun.
Bir nechta indekslar bilan ishlash (Ierarxik indekslash)
Satrlarda birdan ortiq toifa bo'yicha guruhlash kerak bo'lsa nima bo'ladi? Misol uchun, savdoni Region bo'yicha, so'ngra har bir mintaqa ichida Country bo'yicha ajratamiz. index parametriga ustunlar ro'yxatini o'tkazishimiz mumkin.
# Index uchun ro'yxatdan foydalangan holda ko'p darajali pivot jadval
multi_index_pivot = pd.pivot_table(df,
values='Revenue',
index=['Region', 'Country'],
aggfunc='sum',
fill_value=0)
print(multi_index_pivot)
Natija:
Revenue
Region Country
Asia China 488
India 1760
Japan 10860
Europe France 1020
Germany 14440
UK 1115
North America Canada 17800
USA 12058
Pandas satrlarda avtomatik ravishda MultiIndex yaratdi. Ushbu ierarxik tuzilma ma'lumotlaringizni chuqurlashtirish va ichki munosabatlarni ko'rish uchun ajoyib. Ierarxik ustunlarni yaratish uchun xuddi shu mantiqni columns parametriga qo'llashingiz mumkin.
Bir nechta agregatsiya funktsiyalaridan foydalanish
Ba'zan bitta xulosa statistikasi etarli emas. Siz har bir guruh uchun umumiy daromadni (sum) va o'rtacha tranzaksiya hajmini (mean) ko'rishni xohlashingiz mumkin. Siz aggfunc ga funktsiyalar ro'yxatini o'tkazishingiz mumkin.
# Bir nechta agregatsiya funktsiyalaridan foydalanish
multi_agg_pivot = pd.pivot_table(df,
values='Revenue',
index='Region',
aggfunc=['sum', 'mean', 'count'])
print(multi_agg_pivot)
Natija:
sum mean count
Revenue Revenue Revenue
Region
Asia 13108.000000 2184.666667 6
Europe 16575.000000 2762.500000 6
North America 29858.000000 4976.333333 6
Ushbu bitta buyruq bizga keng qamrovli xulosa beradi: har bir mintaqa uchun umumiy daromad, har bir tranzaksiya uchun o'rtacha daromad va tranzaksiyalar soni. Pandas chiqishni tartibli saqlash uchun qanday qilib ierarxik ustunlar yaratishiga e'tibor bering.
Turli qiymatlarga turli funktsiyalarni qo'llash
Siz yanada granular bo'lishingiz mumkin. Tasavvur qiling-a, siz Revenue yig'indisini, lekin Units_Sold ning o'rtachasini ko'rishni xohlaysiz. Siz aggfunc ga lug'atni o'tkazishingiz mumkin, bunda kalitlar ustun nomlari ('values') va qiymatlar kerakli agregatsiya funktsiyalari hisoblanadi.
# Turli qiymatlar uchun turli xil agregatsiyalar
dict_agg_pivot = pd.pivot_table(df,
index='Region',
values=['Revenue', 'Units_Sold'],
aggfunc={
'Revenue': 'sum',
'Units_Sold': 'mean'
},
fill_value=0)
print(dict_agg_pivot)
Natija:
Revenue Units_Sold
Region
Asia 13108 17.833333
Europe 16575 8.166667
North America 29858 14.333333
Nazoratning bu darajasi pivot_table() ni murakkab ma'lumotlarni tahlil qilish uchun premyer vositaga aylantiradi.
margins bilan katta jami hisoblash
Hisobot berish maqsadida satr va ustun jami bo'lishi ko'pincha muhimdir. margins=True argumenti buni hech qanday qo'shimcha harakatlarsiz ta'minlaydi.
# margins=True bilan jami qo'shish
revenue_with_margins = pd.pivot_table(df,
values='Revenue',
index='Product_Category',
columns='Region',
aggfunc='sum',
fill_value=0,
margins=True,
margins_name='Grand Total') # Jami uchun maxsus nom
print(revenue_with_margins)
Natija:
Region Asia Europe North America Grand Total Product_Category Apparel 1125 625 0 1750 Books 336 360 488 1184 Electronics 13200 14550 29100 56850 Grand Total 14661 15535 29588 59784
Pandas avtomatik ravishda har bir satr uchun yig'indini (barcha mintaqalar bo'ylab har bir mahsulot toifasi uchun umumiy daromad) va har bir ustun uchun yig'indini (barcha toifalar bo'yicha har bir mintaqa uchun umumiy daromad), shuningdek, pastki o'ng burchakdagi barcha ma'lumotlar uchun katta jami hisoblaydi.
Amaliy foydalanish holati: Vaqtga asoslangan tahlil
Pivot jadvallari statik toifalar bilan cheklanmaydi. Ular vaqt seriyali ma'lumotlarni tahlil qilish uchun nihoyatda foydali. Keling, har bir oy uchun umumiy daromadni topamiz.
Birinchidan, biz 'Date' ustunimizdan oyni chiqarishimiz kerak. Buning uchun Pandas-da .dt aksessuaridan foydalanishimiz mumkin.
# Sanalar ustunidan oyni chiqarish
df['Month'] = df['Date'].dt.month_name()
# Mahsulot toifasi bo'yicha oylik daromadni ko'rish uchun Pivot
monthly_revenue = pd.pivot_table(df,
values='Revenue',
index='Month',
columns='Product_Category',
aggfunc='sum',
fill_value=0)
# Ixtiyoriy: Oylarni to'g'ri tartiblash
month_order = ['January', 'February', 'March']
monthly_revenue = monthly_revenue.reindex(month_order)
print(monthly_revenue)
Natija:
Product_Category Apparel Books Electronics Month January 250 360 23100 February 795 794 24250 March 705 30 9500
Ushbu jadval bizga har bir toifaning vaqt o'tishi bilan savdo ko'rsatkichlari to'g'risida aniq ma'lumot beradi va bizga trendlar, mavsumiylik yoki anomaliyalarni osongina aniqlashga imkon beradi.
pivot_table() va groupby(): Farqi nimada?
Bu Pandasni o'rganayotganlar uchun umumiy savol. Ikkala funktsiya ham chambarchas bog'liq va aslida pivot_table() groupby() ustiga qurilgan.
groupby()ko'proq umumiy va fundamental operatsiya. U ma'lumotlarni ba'zi mezonlar asosida guruhlaydi va keyin sizga agregatsiya funktsiyasini qo'llash imkonini beradi. Natijada odatda ierarxik indeksli Pandas Series yoki DataFrame bo'ladi, lekin u 'uzun' formatda qoladi.pivot_table()- bu guruhlashni amalga oshiradigan va keyin ma'lumotlarni qayta shakllantiradigan ixtisoslashgan vosita. Uning asosiy maqsadi ma'lumotlarni uzun formatdan keng formatga aylantirishdir, bu ko'pincha odamlar uchun o'qish osonroqdir.
Keling, groupby() yordamida birinchi misolimizga qaytaylik:
# Bizning birinchi pivot jadvalimiz bilan bir xil natija, lekin groupby dan foydalanish
category_revenue_groupby = df.groupby('Product_Category')['Revenue'].sum()
print(category_revenue_groupby)
Natija bizning birinchi pivot jadvalimizdagi DataFrame bilan funktsional jihatdan ekvivalent bo'lgan Pandas Series hisoblanadi. Biroq, ikkinchi guruhlash kalitini (masalan, 'Region') kiritganingizda, farq aniq bo'ladi.
# Ikki ustun bo'yicha guruhlash
groupby_multi = df.groupby(['Product_Category', 'Region'])['Revenue'].sum()
print(groupby_multi)
Natija (MultiIndex bilan seriya):
Product_Category Region
Apparel Asia 1125
Europe 625
Books Asia 336
Europe 360
North America 488
Electronics Asia 13200
Europe 14550
North America 29100
Name: Revenue, dtype: int64
pivot_table(index='Product_Category', columns='Region') bilan bir xil 'keng' formatni olish uchun siz groupby() dan keyin unstack() dan foydalanishingiz kerak bo'ladi:
# groupby().unstack() bilan pivot jadvalini takrorlash
groupby_unstack = df.groupby(['Product_Category', 'Region'])['Revenue'].sum().unstack(fill_value=0)
print(groupby_unstack)
Bu ustunlar bilan bizning pivot jadvalimiz bilan bir xil natijani beradi. Shunday qilib, siz pivot_table() ni umumiy groupby().aggregate().unstack() ish jarayoni uchun qulay qisqa yo'l deb o'ylashingiz mumkin.
Qachon nimadan foydalanish kerak?
- Siz odamlar uchun o'qish osonroq, keng formatli chiqishni xohlaganingizda, ayniqsa hisobot berish yoki o'zaro jadvallarni yaratish uchun
pivot_table()dan foydalaning. - Sizga ko'proq moslashuvchanlik kerak bo'lganda, ma'lumotlarni qayta ishlash quvurida oraliq hisob-kitoblarni amalga oshirayotganda yoki qayta shakllangan, keng format sizning yakuniy maqsadingiz bo'lmasa,
groupby()dan foydalaning.
Ishlash va eng yaxshi amaliyotlar
pivot_table() kuchli bo'lsa-da, uni samarali ishlatish muhim, ayniqsa katta ma'lumotlar to'plami bilan.
- Avval filtrlang, keyin Pivot qiling: Agar sizga ma'lumotlaringizning faqat bir qismini (masalan, o'tgan yildagi savdolar) tahlil qilish kerak bo'lsa, pivot jadvalini qo'llashdan oldin DataFrame ni filtrlang. Bu funktsiya qayta ishlashi kerak bo'lgan ma'lumotlar hajmini kamaytiradi.
- Kategorik turlardan foydalaning: Pivot jadvallaringizda indekslar yoki ustunlar sifatida tez-tez ishlatadigan ustunlar uchun (masalan, 'Region' yoki 'Product_Category'), ularni Pandas-da 'category' dtype ga aylantiring. Bu xotira sarfini sezilarli darajada kamaytirishi va guruhlash operatsiyalarini tezlashtirishi mumkin.
df['Region'] = df['Region'].astype('category') - O'qilishi mumkin bo'lgan narsalarni saqlang: Juda ko'p indekslar va ustunli pivot jadvallarini yaratishdan saqlaning. Mumkin bo'lsa-da, yuzlab ustunlar va minglab qatorlardan iborat pivot jadvali asl xom ma'lumotlar kabi o'qilishi mumkin emas. Undan maqsadli xulosalar yaratish uchun foydalaning.
- Agregatsiyani tushuning:
aggfuncni tanlashga e'tiborli bo'ling. Narxlarda 'sum' dan foydalanish mantiqqa to'g'ri kelmaydi, 'mean' esa mosroq bo'lishi mumkin. Har doim agregatsiyangiz javob berishga harakat qilayotgan savolga mos kelishiga ishonch hosil qiling.
Xulosa: Tushunarli xulosalar uchun vositangiz
Pandas pivot_table() funktsiyasi har qanday ma'lumotlar tahlilchisining vositalar to'plamidagi ajralmas vositadir. U ifodali, ifodali va kuchli usulni taqdim etadi, bu tartibsiz, batafsil ma'lumotlardan toza, tushunarli xulosalarga o'tish. Uning asosiy komponentlarini - values, index, columns va aggfunc - tushunish va o'zlashtirish va uning ko'p darajali indekslash, maxsus agregatsiyalar va marjlar kabi ilg'or funktsiyalaridan foydalanish orqali siz ma'lumotlaringizni murakkab biznes savollariga Python kodining bir necha qatorlari bilan javob berish uchun qayta shakllantirishingiz mumkin.
Keyingi safar siz katta ma'lumotlar to'plami bilan duch kelganingizda, cheksiz satrlarni aylantirish istagiga qarshi turing. Buning o'rniga, javob berishingiz kerak bo'lgan savollar va pivot jadvali ma'lumotlaringizni ichida yashiringan hikoyalarni ochib berish uchun qanday qayta shakllantirishi mumkinligi haqida o'ylab ko'ring. Baxtli pivoting!